﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Web.Management;
using dao.commons;

namespace dao.daos
{
    public class VentaDao: BaseDao, IDao
    {

        public VentaDao() : base("VENTA", "ID_VENTA", true)
        {
        }

        public int numeroUltimaVenta()
        {
            string comando = "Select top 1 ID_VENTA FROM VENTA ORDER BY ID_VENTA DESC";
            SqlDataReader dr = traerDatosConsulta(comando);
            dr.Read();
            int num = int.Parse(dr["ID_VENTA"].ToString());
            return num;
        }

        public int numeroUltimoPago()
        {
            string comando = "Select top 1 ID_PAGO FROM PAGO ORDER BY ID_PAGO DESC";
            SqlDataReader dr = traerDatosConsulta(comando);
            dr.Read();
            int num = int.Parse(dr["ID_PAGO"].ToString());
            return num;
        }

        public void registrarVenta(string venta, string[] detVenta, string pago, string[] detPago)
        {
            DetalleVentaDao dv = new DetalleVentaDao();
            DetallePagoDao dp = new DetallePagoDao();
            PagoDao p = new PagoDao();
            SqlConnection con = new SqlConnection();

            con.ConnectionString = StringConexion; 
            SqlTransaction trans = null;
            con.Open();
            trans = con.BeginTransaction();
            try
            {
                Insertar(venta, con, trans);

                for (int i = 0; i < detVenta.Length; i++)
                {
                    dv.Insertar(detVenta[i], con, trans);
                }

                p.Insertar(pago, con, trans);

                for (int i = 0; i < detPago.Length; i++)
                {
                    dp.Insertar(detPago[i], con, trans);
                }
                trans.Commit();

            }
            catch (Exception e)
            {
                if (trans != null)
                    trans.Rollback();

                throw new SqlExecutionException("Error al insertar detalle de Venta", e);
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }

        }

        public SqlDataReader ObtenerVentasPorEmpleado(int idEmpleado)
        {
            string comando = "select v.ID_VENTA, v.FECHA_ALTA, e.NOMBRE, v.MONTO_TOTAL from  dbo.VENTA v INNER JOIN dbo.EMPLEADO e ON (e.ID_EMPLEADO=v.ID_EMPLEADO)";

            if (idEmpleado != 0)
            {
                   comando += " WHERE v.ID_EMPLEADO =" + idEmpleado;
            }
                

            SqlDataReader dr = traerDatosConsulta(comando);
            return dr;
        }

        public SqlDataReader ObtenerVentasXEmpleado(int idEmpleado)
        {
            string comando = "select v.ID_VENTA, v.FECHA_ALTA, e.NOMBRE, v.MONTO_TOTAL ";
            comando += " from  VENTA v INNER JOIN EMPLEADO e ON (e.ID_EMPLEADO=v.ID_EMPLEADO) ";

            if (idEmpleado != 0)
                comando += " WHERE v.ID_EMPLEADO = "+idEmpleado;

            SqlDataReader dr = traerDatosConsulta(comando);
            return dr;
        }

        public SqlDataReader datosDeInforme(string cod, string fechaDesde, string fechaHasta, double precioDesde, double precioHasta)
        {
            string comando = "Select  ven.ID_VENTA, prod.CODIGO, prod.DESCRIPCION, prod.PRECIO_VENTA, ven.FECHA_ALTA";
            comando += " from PRODUCTO prod INNER JOIN DETALLE_VENTA dt on(prod.ID_PRODUCTO=dt.ID_PRODUCTO)";
            comando += " INNER JOIN VENTA ven on (dt.ID_VENTA=ven.ID_VENTA) where 1=1";
            if (cod != "")
                comando += string.Format(" and prod.CODIGO LIKE '{0}%'", cod);
            if (fechaDesde != "")
                comando += string.Format(" and ven.FECHA_ALTA BETWEEN '{0}' AND '{1}'", fechaDesde, fechaHasta);
            if (precioHasta != 0)
                comando += string.Format(" and prod.PRECIO_VENTA BETWEEN {0} and {1}", precioDesde, precioHasta);
            SqlDataReader dr = traerDatosConsulta(comando);
            return dr;
        }    }
}
